package com.hehe.controller.QQ_space;

import com.hehe.DTO.QqSpaceDTO;
import com.hehe.POJO.Qq_space;
import com.hehe.POJO.Qq_space_user_like;
import com.hehe.POJO.User;
import com.hehe.Repository.QQspaceRepository;
import com.hehe.Repository.QQspaceUserLikeRepository;
import com.hehe.Repository.UserRepository;
import com.hehe.Service.UserService;
import jakarta.annotation.Resource;
import jakarta.annotation.Resources;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.*;

import static org.springframework.data.jpa.domain.AbstractPersistable_.id;

@Slf4j
@Controller
@RequestMapping(value = "")
public class QQ_space_update {

    @Value("${config_file_name}")
    private String config_file_name;




/*  gpt:
建议和最佳实践：
推荐使用  构造函数注入
构造函数注入是 Spring 官方推荐的方式，它能够明确地表达出一个类的依赖关系，
并且可以保证类在被实例化时，所有的依赖都已经设置好。这种方式也使得类在测试时更容易被模拟和替换。
    @Autowired
    public UserController2(UserService userService) {
        this.userService = userService;
    }

避免使用字段注入：字段注入容易导致依赖关系的不可控性和复杂性，尤其是在大型项目中，
它会增加代码的维护成本和理解难度。同时，字段注入也不利于单元测试和依赖注入的可视化管理。
    @Autowired
    public UserService userService;

综上所述，虽然字段注入在某些情况下可能会更加方便，但是为了代码的可维护性和可测试性，
推荐使用构造函数注入作为首选方式。   */

    // 构造函数注入

    @Resource
    private QQspaceRepository qQspaceRepository;

    @Resource
    private UserRepository userRepository;

    @Resource
    private QQspaceUserLikeRepository qQspaceUserLikeRepository;

    @Resource
    private UserService userService;


    // SEO 影响: 如果你的应用涉及到 SEO，重定向可能会影响搜索引擎的索引策略。确保重定向不会引起不必要的重复内容问题。
    // 额外的重定向: 每次访问 /qq-space-list 都会发生一次重定向，这可能略微增加服务器负担。
//    @GetMapping(value = "/qq-space-list")
//    public String sdfsdfgdfg(){
//        return "redirect:/qq-space-list/1";
//    }


    @PostMapping(value = "/api/qq-space/update")
    @ResponseBody
    public String index(Model model, @RequestBody Map<String, Object> requestData, HttpServletRequest request) {
        String usernameByCookie = userService.get_username_by_cookie(request);
        if (usernameByCookie == null) {
            return "error";
        } else {
            User byUsername = userRepository.findByUsername(usernameByCookie);
            if (Objects.equals(byUsername.getRole(), "admin")) {
                int id = Integer.parseInt((String) requestData.get("id"));
                String describ = (String) requestData.get("describ");
                qQspaceRepository.setDescriptionById(describ, id);
                return "success";
            } else {
                return "error";
            }
        }
    }









/*
    @GetMapping(value = "/articles/add")   // get 请求
    public String new_article(Model model) {
        log.info(" 添加文章");
//        model.addAttribute("articles", articleService.findAll());
        return "article/article-add.html";
    }


    @GetMapping("/article/{id}")
    public String aaa(@PathVariable long id, Model model) {
        log.info("文章 by id ");
        Optional<Article> optionalArticle = articleService.findById(id);
        if (optionalArticle.isPresent()) {
            Article article = optionalArticle.get();
            model.addAttribute("article", article);
            return "article/article-detail.html";
        } else {
            // 处理找不到文章的情况
            return "error-page.html"; // 或者返回一个适当的错误视图
        }
    }


    @GetMapping("/article/edit/{id}")
    public String edit(@PathVariable long id, Model model) {
        log.info(" edit  文章 by id ");
        Optional<Article> optionalArticle = articleService.findById(id);
        if (optionalArticle.isPresent()) {
            Article article = optionalArticle.get();
            model.addAttribute("article", article);
            return "article/article-add-edit.html";
        } else {
            // 处理找不到文章的情况
            return "error-page.html"; // 或者返回一个适当的错误视图
        }
    }





    @PostMapping("/article/add")  // post 请求
    public ResponseEntity<?> add_user(@Valid @RequestBody Article article , BindingResult result) {
        if (result.hasErrors()) {
            return ResponseEntity.badRequest().body(result.getAllErrors());
        }
        try {
            articleService.save(article);
//            return ResponseEntity.status(200).body("上传成功");
            return ResponseEntity.ok("上传成功");
        } catch (Exception e) {
            return ResponseEntity.badRequest().body("Failed to add article: " + e.getMessage());
        }
    }





        // 上传文章接口, 三个字段:
    // title , content , VerificationCode (验证码)
    @PostMapping("/add-test")
    public ResponseEntity<?> addUser(@RequestBody String requestBody) {
        // 将请求体解析为 JSONObject
        JSONObject jsonObject = new JSONObject(requestBody);
        // 获取请求体中的数据
        String title = jsonObject.getString("title");
        String content = jsonObject.get("content").toString();

        // 保存到数据库
        Article article = new Article();
        article.setTitle(title);
        article.setContent(content);

        try {
            articleService.save(article);
            return ResponseEntity.status(200).body("上传成功");
        } catch (Exception e) {
            return ResponseEntity.badRequest().body("Failed to add article: " + e.getMessage());
        }


    }


//    @GetMapping(value="/article/{id}"  )
//    public String article_detail(Model model){
//        log.info("article_detail.html");
//        return "article_detail.html";
//    }



*/

}




